import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({

  state: {
    // 共享数据源存放地方
    count: 0,
    name: '我是测试数据二'
  },
  // 用来修改共享数据方法 该函数中不能编写异步的方法 只有这个函数有修改共享数据的权利
  mutations: {
    add(state) {
      state.count++
    },
    addN(state, step) {
      state.count += step
    },
    sub(state) {
      state.count--
    },
    subN(state, step) {
      state.count -= step
    }
  },
  // 用来异步修改共享数据方法
  actions: {
    addAsync(context) {
      // 这个方法只执行异步的动作 修改数据的方法还是需要通过commit函数来实现
      setTimeout(() => {
        context.commit('add')
      }, 1000);
    },
    addAsyncN(context, step) {
      // 这个方法只执行异步的动作 修改数据的方法还是需要通过commit函数来实现
      setTimeout(() => {
        context.commit('addN', step)
      }, 1000);
    },
    subAsync(context) {
      setTimeout(() => {
        context.commit('sub')
      }, 1000);
    },
    subAsyncN(context, step) {
      setTimeout(() => {
        context.commit('subN', step)
      }, 1000);
    }
  },
  // 用来拼接修改数据方法
  getters: {
    showName(state) {
      return '我是修改之后的拼接数据' + 'name ：' + state.name
    }
  }
})
